// 练习今天的数组的apl

let arr = [3,6,4,0,9,7,8,9,5,6,4]

// indexof（—，-，）可以右一个参数也可以有两个参数， 有一个开始找的话那就是找这已有内容的索引，
// 两个参数第一个参数是要找的内容的索引 第二个参数是从第一个位置开始查找
// 返回值是找到数据是第几个索引
//  let isArr = arr.indexOf(4,3)
// console.log(isArr)

// forEach : 功能是循环; 参数有三个, 第一个参数是循环出来的每一个值, 第二个参数是每一个值得索引, 第三个值是循环数组本身
// 返回值: undefined 任何情况下都是这个是一个(js语句)
// 是否返回原数组要看循环内部的操作
// arr.forEach((val, index, self)=>{
//
//     val =  val + 1
//     console.log(val)
// })

// map 遍历数组,
// 参数和forEach一样
// 返回值以一个数组, 数组内 保存了回调函数每次的返回值
// 是否返回原数组要看循环内部的操作
// let isArr = arr.map((val,ind,self)=>{
//     return val + ind + self
// })
// console.log(isArr)


// filtet
// 功能跟 forEach + filter 规则:只需要数组中有一个数组符合要求
// 返回值跟 forEach 和 map一样
// 返回值: 布尔值 , 当返回函数中有一个返回true时 结果为true , 同时停止遍历: 全部为flse,才为false(遍历所有)
// 是否改变原数组：同forEach
// let isArr = arr.filter((val,ind,self)=>{
//     return ind < 5
// })
// console.log(isArr)

// every
// 功能：同forEach + filter，规则：需要数组中所有数据都符合要求。
// 参数：同forEach
// 返回值：布尔值，当回调函数中有一个返回false时，结果为false，同时停止遍历；全部为true，才为true（遍历所有）
// 是否改变原数组：同forEach
// let isArr = arr.every((val,ind,self)=>{
//     // console.log(val)
//     return val
// })
// console.log(isArr)


// reduce
// 功能：归并
// 参数：1回调函数，2初始值，可选
// 回调函数又有四个参数：
// 1如果reduce有第二个参数，就是这个值；如果reduce没有第二个参数，是数组的第一个数据；之后每次回调函数执行时，表示前一个回调函数的返回值。
// 2如果reduce有第二个参数，是数组的第一个数据，如果reduce没有第二个参数，是数组的第二个数据
// 3每次遍历到的数据对应的索引
// 4数组自身
// 返回值：最后一次回调函数的返回值
// let isArr = arr.reduce((prev, now, ind, self)=>{
//     console.log(prev,now,ind,self)
//     return "hello"
// })
// console.log(isArr)
let myarr = [1,2,3,4,5,6]
let isArr = myarr.reduce((prev,now)=>{
    console.log(prev, now)

    // return prev + now
})
// console.log(isArr)